/**
 * 将秒转换为毫秒
 * @param {number} seconds 秒数
 * @returns {number} 毫秒数
 */
function secondsToMs(seconds) {
    return seconds * 1000;
}

/**
 * 将毫秒转换为秒
 * @param {number} ms 毫秒数
 * @returns {number} 秒数
 */
function msToSeconds(ms) {
    return ms / 1000;
}

/**
 * 将日期格式化为易读字符串
 * @param {Date} date 日期对象
 * @returns {string} 格式化的日期字符串
 */
function formatDate(date) {
    return date.toLocaleString();
}

/**
 * 创建超时Promise
 * @param {number} ms 超时毫秒数
 * @returns {Promise<void>} 一个Promise，在指定毫秒数后解析
 */
function createTimeout(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
}

/**
 * 使用超时包装Promise
 * @param {Promise<any>} promise 要包装的Promise
 * @param {number} ms 超时毫秒数
 * @param {string} timeoutMessage 超时错误消息
 * @returns {Promise<any>} 包装后的Promise
 */
function withTimeout(promise, ms, timeoutMessage = '操作超时') {
    let timeoutId;
    const timeoutPromise = new Promise((_, reject) => {
        timeoutId = setTimeout(() => reject(new Error(timeoutMessage)), ms);
    });

    return Promise.race([
        promise.then((result) => {
            clearTimeout(timeoutId);
            return result;
        }),
        timeoutPromise
    ]);
}

/**
 * 延迟执行函数
 * @param {number} ms 延迟毫秒数
 * @returns {Promise<void>} 延迟Promise
 */
function delay(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
}

module.exports = {
    secondsToMs,
    msToSeconds,
    formatDate,
    createTimeout,
    withTimeout,
    delay
}; 